package com.example.qcrmdemo.interceptor;

import com.example.qcrmdemo.entity.Role;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * 登录拦截器
 * 可以拦截每一个请求
 * 类似于过滤器
 * 对于每一个请求，测试其相应的会话对象中没有name属性
 * 如果有，则放过该请求的访问，否则,表明当前用户没有遍历，跳转到登录页面,强制用户登录
 * @author dabengzhu
 */
public class LoginInerceptor implements HandlerInterceptor {
    //前置处理
    //返回true,则调用继续
    //返回false,调用结束,捕获调用控制器处理方法
 @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception{
    //从当前对象中取出相应的session对象
     //复习:在服务器内存中查找与request对象携带的sessionID相应的session对象

     HttpSession session=request.getSession();

     //从session中role属性对应的用户信息对象
     Role role= (Role) session.getAttribute("role");
     if(role!=null){
         //如果role存在,则意味着这用户已经登录
         //如果已经是登录状态，则放行这个请求
         return true;
     }
     //直接调用HttpServletResponse对象的方法，设置相应为重定向
     response.sendRedirect("/login");

     //返回false意味着不会做任何处理，直接进行返回状态
     return false;
 }
}
